package main

import (
	"base_go/ReadYml/conf"
	"fmt"
	"github.com/spf13/viper"
	"log"
	"os"
)

func main() {
	readManyYmlConf()
}
// 根据环境变量读取配置文件
func readManyYmlConf(){
	c := &conf.AppConfig{}
	v := viper.New()

	pa := os.Getenv("PROFILE_ACTIVE") //读取环境变量中设置的当前生效配置名称
	fmt.Println(pa)
	if pa != "" {
		v.SetConfigName(pa)
		v.AddConfigPath("F:\\P8\\workspace\\base_go\\ReadYml\\conf")
		v.SetConfigType("yml")
		err := v.ReadInConfig()
		if err != nil {
			log.Fatal("读取配置文件失败：", err)
			return
		}
		configs := v.AllSettings()
		for k, val := range configs {
			v.SetDefault(k, val)
		}
	}
	err := v.Unmarshal(c)
	if err != nil {
		log.Fatal("读取配置错误：", err)
	}
	fmt.Println(c)
}

// 读取单个环境的yml
func readYmlConf(){
	c := &conf.AppConfig{}
	v := viper.New()
	v.SetConfigName("app") //这里就是上面我们配置的文件名称，不需要带后缀名
	v.AddConfigPath("F:\\P8\\workspace\\base_go\\ReadYml\\conf") //文件所在的目录路径
	v.SetConfigType("yml") //这里是文件格式类型
	err := v.ReadInConfig()
	if err != nil {
		log.Fatal("读取配置文件失败：", err)
		return
	}
	configs := v.AllSettings()
	for k, val := range configs {
		v.SetDefault(k, val)
	}
	err = v.Unmarshal(c) //反序列化至结构体
	if err != nil {
		log.Fatal("读取配置错误：", err)
	}
	fmt.Println(c)  // 配置都传递到结构体里面了
}